#ifndef CPP_BT_SERVICE_H
#define CPP_BT_SERVICE_H

#include <cvte_connect.h>
class WakeLock;

//@brief 蓝牙服务
//@author cvte
class BtService {
   public:
    class BtServiceListener {
       public:
        virtual void onBtStatusChanged(CVTE_BT_STATUS_DATA data);
        virtual void onBtPlayStatusChanged(CVTE_BT_A2DP_PLAY_DATA data);
        virtual void onBtMusicInfoChanged(CVTE_BT_A2DP_MUSIC_INFO data);
    };

    static BtService* getInstance();

    //@method 开关蓝牙音乐功能
    void switchBtMusicOnOff(bool enable);
    //@method 获取蓝牙名字, 注意至少打开过一次蓝牙后才能获取正确的名字
    const char* getBtName();
    //@method BT状态请求
    void statusReq(void);
    //@method 获取BT状态
    CVTE_BT_STATUS_DATA getBtStatus();
    //@method 获取蓝牙音乐播放状态
    CVTE_BT_A2DP_PLAY_DATA getBtMusicPlayStatus();
    //@method 获取蓝牙音乐信息
    CVTE_BT_A2DP_MUSIC_INFO getBtMusicInfo();
    //@method 蓝牙音乐播放控制
    void controlBtMusicPlay(CVTE_A2DP_CTRL ctrl, int param);
    //@method 设置监听
    void setListener(BtServiceListener& listener);
    //@method 消息队列处理
    void notifyProc(uint32_t id_notify, uint8_t* value);

   private:
    static BtService* sInstance;
    BtServiceListener* mListener = nullptr;
    CVTE_BT_STATUS_DATA mBtStatus;
    CVTE_BT_A2DP_PLAY_DATA mBtMusicPlayStatus;
    CVTE_BT_A2DP_MUSIC_INFO mBtMusicInfo;
    char mBtName[32] = {0};
    WakeLock* mBtWakeLock = nullptr;

    BtService();
    virtual ~BtService();
};

#endif